package savet.gui.modelos;

import java.util.Date;
import java.util.List;
import java.util.Observable;
import savet.entidades.Trabalhador;
import savet.entidades.atributos.ASOS;
import savet.entidades.atributos.AtributoData;
import savet.util.Trabalhadores;

/**
 *
 * @author Adisson Marinho
 */
public class ModeloExamesMedicos extends AbstractAtributoDataModel {

    public ModeloExamesMedicos(Object[] colunas) {
        super(colunas);
    }

    public ModeloExamesMedicos(Object[] colunas, Date inicio, Date fim) {
        super(colunas, inicio, fim);
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        ASOS examMed = getTrabalhador(rowIndex).getExamMed();
        List<AtributoData> atributosData = examMed.getAtributosData();
        return atributosData.get(columnIndex);
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        if (aValue != null) {
            getTrabalhador(rowIndex).getExamMed().getAtributosData().set(columnIndex, (AtributoData) aValue);
        }
    }

    public void elementoAdicionado(Trabalhador trabalhador) {
        criarExamMedicos(trabalhador);
        fireTableDataChanged();
    }

    public void elementoRemovido(Trabalhador trabalhador) {
        fireTableDataChanged();
    }

    @Override
    protected void carregarAtributos() {
        for (Trabalhador trabalhador : trabalhadores) {
            criarExamMedicos(trabalhador);
        }
    }

    private void criarExamMedicos(Trabalhador trabalhador) {
        if (trabalhador.getExamMed() == null) {
            ASOS examMed = new ASOS();
            examMed.setTrabalhador(trabalhador);
            examMed.setAtributosData(Trabalhadores.getListaAtributoMeses(inicioPeriodo, fimPeriodo));
            trabalhador.setExamMed(examMed);
        } else {
            atualizaExamMedicos(trabalhador);
        }
    }

    private void atualizaExamMedicos(Trabalhador trabalhador) {
        ASOS examMed = trabalhador.getExamMed();
        if (examMed != null) {

            List<AtributoData> oldListAtt = examMed.getAtributosData();
            List<AtributoData> newListAtt = Trabalhadores.getListaAtributoMeses(inicioPeriodo, fimPeriodo);

            atualizaListaAtributos(newListAtt, oldListAtt);

            examMed.setAtributosData(newListAtt);
        } else {
            criarExamMedicos(trabalhador);
        }
    }

    @Override
    public void update(Observable o, Object arg) {
        if (arg instanceof Trabalhador) {
            Trabalhador t = (Trabalhador) arg;
            atualizaExamMedicos(t);
        }
    }

}
